/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.fontbox.cff;


/**
 * This is specialized CFFCharset. It's used if the CharsetId of a font is set to 2.
 * 
 * @author Villu Ruusmann
 */
public final class CFFExpertSubsetCharset extends CFFCharsetType1
{

    private static final int CHAR_CODE = 0;
    private static final int CHAR_NAME = 1;
    
    private CFFExpertSubsetCharset()
    {
        // Table of character codes and their corresponding names.
        Object[][] cffExpertSubsetCharsetTable = {
                {0, ".notdef"},
                {1, "space"},
                {231, "dollaroldstyle"},
                {232, "dollarsuperior"},
                {235, "parenleftsuperior"},
                {236, "parenrightsuperior"},
                {237, "twodotenleader"},
                {238, "onedotenleader"},
                {13, "comma"},
                {14, "hyphen"},
                {15, "period"},
                {99, "fraction"},
                {239, "zerooldstyle"},
                {240, "oneoldstyle"},
                {241, "twooldstyle"},
                {242, "threeoldstyle"},
                {243, "fouroldstyle"},
                {244, "fiveoldstyle"},
                {245, "sixoldstyle"},
                {246, "sevenoldstyle"},
                {247, "eightoldstyle"},
                {248, "nineoldstyle"},
                {27, "colon"},
                {28, "semicolon"},
                {249, "commasuperior"},
                {250, "threequartersemdash"},
                {251, "periodsuperior"},
                {253, "asuperior"},
                {254, "bsuperior"},
                {255, "centsuperior"},
                {256, "dsuperior"},
                {257, "esuperior"},
                {258, "isuperior"},
                {259, "lsuperior"},
                {260, "msuperior"},
                {261, "nsuperior"},
                {262, "osuperior"},
                {263, "rsuperior"},
                {264, "ssuperior"},
                {265, "tsuperior"},
                {266, "ff"},
                {109, "fi"},
                {110, "fl"},
                {267, "ffi"},
                {268, "ffl"},
                {269, "parenleftinferior"},
                {270, "parenrightinferior"},
                {272, "hyphensuperior"},
                {300, "colonmonetary"},
                {301, "onefitted"},
                {302, "rupiah"},
                {305, "centoldstyle"},
                {314, "figuredash"},
                {315, "hypheninferior"},
                {158, "onequarter"},
                {155, "onehalf"},
                {163, "threequarters"},
                {320, "oneeighth"},
                {321, "threeeighths"},
                {322, "fiveeighths"},
                {323, "seveneighths"},
                {324, "onethird"},
                {325, "twothirds"},
                {326, "zerosuperior"},
                {150, "onesuperior"},
                {164, "twosuperior"},
                {169, "threesuperior"},
                {327, "foursuperior"},
                {328, "fivesuperior"},
                {329, "sixsuperior"},
                {330, "sevensuperior"},
                {331, "eightsuperior"},
                {332, "ninesuperior"},
                {333, "zeroinferior"},
                {334, "oneinferior"},
                {335, "twoinferior"},
                {336, "threeinferior"},
                {337, "fourinferior"},
                {338, "fiveinferior"},
                {339, "sixinferior"},
                {340, "seveninferior"},
                {341, "eightinferior"},
                {342, "nineinferior"},
                {343, "centinferior"},
                {344, "dollarinferior"},
                {345, "periodinferior"},
                {346, "commainferior"}
        };
        int gid = 0;
        for (Object[] charsetEntry : cffExpertSubsetCharsetTable)
        {
            addSID(gid++, (Integer) charsetEntry[CHAR_CODE], charsetEntry[CHAR_NAME].toString());
        }
    }

    /**
     * Returns an instance of the CFFExpertSubsetCharset class.
     * @return an instance of CFFExpertSubsetCharset
     */
    public static CFFExpertSubsetCharset getInstance()
    {
        return CFFExpertSubsetCharset.INSTANCE;
    }

    private static final CFFExpertSubsetCharset INSTANCE = new CFFExpertSubsetCharset();

}
